﻿/*******************************************************
 * 
 * 作者：胡庆访
 * 创建时间：20130326 16:08
 * 说明：此文件只包含一个类，具体内容见类型注释。
 * 运行环境：.NET 4.0
 * 版本号：1.0.0
 * 
 * 历史记录：
 * 创建文件 胡庆访 20130326 16:08
 * 
*******************************************************/

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace MSDNConverter
{
    public class Article
    {
        public Article()
        {
            this.Children = new List<Article>();
            this.Paragraphs = new List<ArticleParagraph>();
        }

        public string FullTitle
        {
            get
            {
                var title = this.Raw.Title;

                var listNo = this.ListNo;
                if (!string.IsNullOrEmpty(listNo))
                {
                    title = listNo + " " + title;
                }

                return title;
            }
        }

        public string ListNo { get; set; }

        public RawArticle Raw { get; set; }

        public IList<ArticleParagraph> Paragraphs { get; private set; }

        public IList<Article> Children { get; private set; }

        public int CountAll()
        {
            int count = 0;
            this.Traverse(a => count++);
            return count;
        }

        public void Traverse(Action<Article> action)
        {
            TraverseRecur(this, action);
        }

        private static void TraverseRecur(Article item, Action<Article> action)
        {
            action(item);
            foreach (var child in item.Children)
            {
                TraverseRecur(child, action);
            }
        }
    }

    public class ArticleParagraph
    {
        /// <summary>
        /// 内容文字。
        /// </summary>
        public string Content { get; set; }

        /// <summary>
        /// 本段是小标题。
        /// </summary>
        public bool IsSubTitle { get; set; }

        /// <summary>
        /// 本段是代码开始段。
        /// </summary>
        public bool IsCodeStart { get; set; }

        /// <summary>
        /// 本段是代码结束段。
        /// </summary>
        public bool IsCodeEnd { get; set; }

        /// <summary>
        /// 本段是否为一张图片。
        /// 
        /// 如果此属性返回 true，那么 Content 则表示这个文件的全路径。
        /// </summary>
        public bool IsImage { get; set; }
    }
}